package com.witmore.skyline.db.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * <p>
 * 设备表
 * </p>
 *
 * @author 豆子高
 * @since 2025-02-24
 */
@Builder
@Getter
@Setter
@TableName("skyline_device")
public class DeviceDO implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 设备id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 第三方传递过来的设备id 如：云机械设备id
     */
    @TableField("third_device_id")
    private Long thirdDeviceId;

    /**
     * 设备序列号
     */
    @TableField("device_sn")
    private String deviceSn;

    /**
     * 设备名称
     */
    @TableField("device_name")
    private String deviceName;

    /**
     * 设备所属企业id
     */
    @TableField("org_id")
    private Integer orgId;

    /**
     * 项目部id
     */
    @TableField("project_id")
    private Integer projectId;

    /**
     * 品牌
     */
    @TableField("brand")
    private String brand;

    /**
     * 设备型号
     */
    @TableField("model")
    private String model;

    /**
     * 设备类型
     */
    @TableField("category")
    private String category;

    /**
     * 设备地址
     */
    @TableField("current_addr")
    private String currentAddr;

    /**
     * 省份（从current_addr解析得出）
     */
    @TableField("province")
    private String province;

    /**
     * 城市（从current_addr解析得出）
     */
    @TableField("city")
    private String city;

    /**
     * 区县（从current_addr解析得出）
     */
    @TableField("district")
    private String district;

    /**
     * 经度
     */
    @TableField("lng")
    private Double lng;

    /**
     * 纬度
     */
    @TableField("lat")
    private Double lat;

    /**
     * 设备工作状态（-1:离线 0:在线 1:怠速 2:负荷）
     */
    @TableField("work_status")
    private Integer workStatus;

    /**
     * 工作总工时
     */
    @TableField("work_time")
    private Double workTime;

    /**
     * 当天工时
     */
    @TableField("today_work_time")
    private Double todayWorkTime;

    /**
     * 安装时间
     */
    @TableField("create_time")
    private LocalDate createTime;

    /**
     * 剩余油位百分比
     */
    @TableField("oil_level")
    private Integer oilLevel;

    /**
     * 怠速时间
     */
    @TableField("idle_time")
    private BigDecimal idleTime;

    /**
     * 负荷工作时间
     */
    @TableField("load_work_time")
    private BigDecimal loadWorkTime;

    /**
     * 单日工作时间
     */
    @TableField("daily_work_time")
    private Double dailyWorkTime;

    /**
     * 定位采集时间
     */
    @TableField("collection_time")
    private LocalDate collectionTime;

    /**
     * 行驶速度，单位：km/h
     */
    @TableField("run_speed")
    private String runSpeed;

    /**
     * 电量，单位：v
     */
    @TableField("battery")
    private String battery;

    /**
     * 里程
     */
    @TableField("mileage")
    private String mileage;

    /**
     * 百公里油耗
     */
    @TableField("oil_per_mileage")
    private String oilPerMileage;

    /**
     * 定位的状态
     */
    @TableField("targeting")
    private String targeting;

    /**
     * 油箱容量(升)
     */
    @TableField("fuel_tank_capacity")
    private Float fuelTankCapacity;

    /**
     * 绑定的驾驶员id
     */
    @TableField("driver_id")
    private Integer driverId;

    /**
     * 驾驶员姓名（冗余字段，提高查询效率）
     */
    @TableField("driver_name")
    private String driverName;

    /**
     * 驾驶员手机号（冗余字段）
     */
    @TableField("driver_phone")
    private String driverPhone;

    /**
     * 绑定时间
     */
    @TableField("bind_time")
    private LocalDateTime bindTime;

    /**
     * 是否有液位模块 0无 1有
     */
    @TableField("has_oil_level_module")
    private Integer hasOilLevelModule;

    /**
     * 是否删除 0未删除 1已删除
     */
    @TableField("is_deleted")
    private Integer isDeleted;

    @TableField("update_time")
    private LocalDateTime updateTime;
}
